package toolfunc

import (
	"fmt"
	"gitee.com/wuzheng0709/backend-gopkg/infrastructure/pkg/gin/log"
	"github.com/bwmarrin/snowflake"
	uuid "github.com/satori/go.uuid"
	"math/rand"

	"time"
)

// 雪花算法
var node *snowflake.Node

func init() {
	var st time.Time
	// 格式化 1月2号下午3时4分5秒  2006年
	st, err := time.Parse("2006-01-02", time.Now().Format("2006-01-02"))
	if err != nil {
		fmt.Println(err)
		return
	}

	snowflake.Epoch = st.UnixNano() / 1e6
	nodeId := rand.Intn(1000) + 1
	log.Info("雪花算法机器id ", nodeId)
	node, err = snowflake.NewNode(int64(nodeId))
	if err != nil {
		fmt.Println(err)
		return
	}

	return
}

func GenerateUUID() string {
	// Generate a snowflake ID.
	id := node.Generate()
	return id.String()
}

func GenerateInt64() int64 {
	// Generate a snowflake ID.
	id := node.Generate()
	return id.Int64()
}

// 生成global UUID
func GenerateGUID() string {
	return uuid.Must(uuid.NewV4(), nil).String()
}
